﻿ /**
 * 
 * @file AbstractPhysicsDialog.h
 * @brief 抽象物理属性对话框声明，材料与物理属性与声学包相关的全部对话框
 * @author LiBaojun (libaojunqd@foxmail.com)
 * @date 2024-12-06
 * 
 */
#ifndef _ABSTRACTDIALOG_PHYSICS_H__
#define _ABSTRACTDIALOG_PHYSICS_H__

#include "GUIPhyscisDialogAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractGUIDialog.h"

namespace Acoustics
{
    class FITKAcousticsMaterialManager;
    class FITKAcousticsPhysicsPropManager;
    class FITKAcousticsAbsPhysicsProp;
    class FITKAcousticsAbsMaterial;
    class FITKAcousticsNCTManager;
    class FITKAcousticsAbsNCT;
}


namespace GUI
{
    /**
     * @brief 执行命令的类型
     * @author LiBaojun (libaojunqd@foxmail.com)
     * @date 2024-12-06
     */
    enum PhysicsDlgExecType
    {
        None,          ///< 空类型
        Create,        ///< 创建
        Edit,          ///< 编辑
        Duplicate,     ///< 复制
    };
     /**
      * @brief 物理属性相关对话框抽象基类 材料与截面等
      * @author LiBaojun (libaojunqd@foxmail.com)
      * @date 2024-12-06
      */
    class GUIPhyscisDialogAPI AbstractPhysicsDialog : public Core::FITKDialog
    {
        Q_OBJECT
    public:
        /**
         * @brief Construct a new Abstract Physics Dialog object
         * @param[i]  type           要执行的类型
         * @param[i]  parent         父对象
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        explicit AbstractPhysicsDialog(PhysicsDlgExecType type, QWidget* parent = nullptr);
        /**
         * @brief Destroy the Abstract Physics Dialog object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        virtual ~AbstractPhysicsDialog() = 0;

    protected:
        /**
         * @brief 执行类型
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        PhysicsDlgExecType _execType{ None };
        /**
         * @brief 物理属性管理器
         * @author wangning (2185896382@qq.com)
         * @date 2024-12-11
         */
        Acoustics::FITKAcousticsPhysicsPropManager* _propMgr{};
        /**
         * @brief 物理属性对象
         * @author wangning (2185896382@qq.com)
         * @date 2024-12-11
         */
        Acoustics::FITKAcousticsAbsPhysicsProp* _prop{};

    };

    
     /**
      * @brief 材料/声学包 对话框抽象类
      * @author LiBaojun (libaojunqd@foxmail.com)
      * @date 2024-12-06
      */
    class GUIPhyscisDialogAPI AbstractMaterialDialog : public AbstractPhysicsDialog
    {
        Q_OBJECT
    public:
        /**
         * @brief Construct a new Abstract Material Dialog object
         * @param[i]  type           操作类型
         * @param[i]  parent         父对象
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        explicit AbstractMaterialDialog(PhysicsDlgExecType type,  QWidget* parent = nullptr);
        /**
         * @brief Destroy the Abstract Material Dialog object
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        virtual ~AbstractMaterialDialog() = 0;

    protected:
        /**
         * @brief 材料管理器
         * @author LiBaojun (libaojunqd@foxmail.com)
         * @date 2024-12-06
         */
        Acoustics::FITKAcousticsMaterialManager* _matMgr{};
        /**
        * @brief 材料对象
        * @author wangning (2185896382@qq.com)
        * @date 2024-12-11
        */
        Acoustics::FITKAcousticsAbsMaterial *_mat{};
        /**
        * @brief 声学包管理器
        * @author wangning (2185896382@qq.com)
        * @date 2024-12-16
        */
        Acoustics::FITKAcousticsNCTManager* _nctMgr{};
        /**
        * @brief 声学包对象
        * @author wangning (2185896382@qq.com)
        * @date 2024-12-16
        */
        Acoustics::FITKAcousticsAbsNCT* _nct{};
    };


  
}

#endif
